Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fcl: 0.6.1-1 in 'rolling/distribution.yaml' [bloom] #29614

Closed
wants to merge 1 commit into from

Conversation

nuclearsandwich
Copy link
Member

Increasing version of package(s) in repository fcl to 0.6.1-1:

@traversaro
Copy link

traversaro commented May 21, 2021

Hi @nuclearsandwich, just a curiosity: how does this interact with the Gazebo binaries that are released on http://packages.osrfoundation.org and that transitively link (via DART) to the Ubuntu upstream fcl? (Related comment in another issue: #26527 (comment)).

@ros-discourse
Copy link

This pull request has been mentioned on ROS Discourse. There might be relevant details there:

https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/7

@mabelzhang
Copy link
Contributor

Hmm based on the discussion above, maybe I shouldn't merge this. I'll wait for followups and someone else who knows more can merge.

@marcoag
Copy link
Contributor

marcoag commented May 27, 2021

To add some context, this is the result of the discussion at: #27789

@nuclearsandwich
Copy link
Member Author

I don't want to put this discussion on hold for too long but I do want to actually examine the decisions leading up to releasing fcl in noetic so that we can either adhere to our own guidelines better in the future or spell out what makes fcl different in this case. @tfoote's comment here should be set down as review policy if it isn't already.

I think there's some case to be made for "well we let it in for Noetic and so ROS 2 distributions built on Focal should be able to use the same fcl dependency in ROS Noetic and ROS Foxy and Galactic (which would be next targets after this Rolling release) and when 22.04 becomes available for which 0.6.1 is the likely upstream version as it is already part of Debian unstable we would drop the in-distribution fcl package.

@mxgrey
Copy link
Contributor

mxgrey commented Jun 15, 2021

I'd like to bump this conversation since getting fcl-0.6 into Rolling is important if we're going to do a release of the RMF packages into Rolling. While the RMF packages can be compiled against either fcl-0.5 or fcl-0.6, we have come across some critical errors in fcl-0.5 where its continuous collision detection may give false negatives for known collisions. Those issues are fixed in fcl-0.6, and I think it's unlikely that we'll see the fixes backported since the code of 0.6 diverges so dramatically from 0.5.

I would feel very uncomfortable releasing RMF on top of a package version that has these known issues, since the false negatives can cause permanent deadlock between robots that are trying to navigate around each other (effectively they don't "see" each other from the perspective of the planner, so they'll just keep trying to plan their paths through each other).

It's true that we could pull the fcl-0.6 source code into our own codebase and statically link against it, but I expect this issue is likely to impact other users, so it would be unfortunate if the whole ecosystem had to use this approach to ensure correct continuous collision detection.

To address @traversaro's concerns, I'm pretty sure there shouldn't be any linking issues since fcl-0.6 has moved everything into a template implementation. I believe a lucky byproduct of that change is that all of the symbols in fcl-0.6 will be generated with different names from fcl-0.5 even if none of the namespaces or class (now template) names get changed.

Copy link
Member

@tfoote tfoote left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The "exception" of 0.5 not conflicting with 0.6 isn't good enough. Because in the future 0.6 will be packaged upstream and then we'll have conflicting versions. And if it's all moved to templates that's actually even worse. Because templates defer evaluation and you can't do things like statically link them in etc. Their headers have to be exposed to downstream compilation units. Thus it may work for Focal right now. But as soon as we look at targeting UbuntuJ on rolling this whole thing will blow up unless you actually deconflict it with things like global symbol renaming. And now we're basically looking at forking the project and then once 0.6 comes out, all users will presumably want to switch to the upstream version and change all their usages to use the non-forked and renamed symbols.

And 0.6 is on the very near horizion. fcl-0.6 has also made it into bullseye: https://packages.debian.org/bullseye/libfcl-dev as well as being in hirsute: https://packages.ubuntu.com/source/hirsute/fcl Which means that fcl 0.6 from the rosdep key will be 22.04.

It's often a hard thing to tell people, but we really can't get ahead of the distributions that we rely upon. If we want to do that we basically should be picking a more progressive base distribution.

If there really are critical errors in 0.5 these should be reported upstream and considered for a bugfix backport. Part of being in the ecosystem is that we need to participate with the other components. If upstream won't take it we could consider doing it for our deployments.

However, swinging back the other way, we're talking about releasing this into rolling which is specifically the development and testing ground distribution. And if we know that these packages are going to be based on 0.6 when Humble comes out then it's much more reasonable to add a clear loud note saying fcl-0.5 has known issues, if you want to deploy to production from rolling on focal than you should be patching your version of fcl.

Also weighing on this is that Fedora appears to be on 0.6 already as well as likely most of the rolling platforms.

Weighing all that together I don't think that we should try to release fcl on top of the system installation in the long run. In the short run, this one will definitely conflict so can't be merged as is without a refactor or isolation process.

@nuclearsandwich
Copy link
Member Author

In the short run, this one will definitely conflict so can't be merged as is without a refactor or isolation process.

What should we do about fcl in noetic, which has already been released. Should fcl 0.6 be removed there?

@tfoote
Copy link
Member

tfoote commented Jun 16, 2021

I think for Noetic it's too baked in now to remove with many packages relying on it. Luckily it might not conflict too much due to the template changes mentioned above which is probably why we haven't gotten too many user reports of issues. We also may not get reports of issues when we break other system installations.

...

On more research I find that there are actually issues reported with conflicts in noetic: #26706 (comment)

The resolution for that was to just tell people to use the newer version which is exactly the conflicts that we should be avoiding.

There's more backstory on conflicts over here too: #26527

In general the more things that we override the tighter the box we paint ourselves into.

@mxgrey
Copy link
Contributor

mxgrey commented Jun 16, 2021

@tfoote I understand the concerns you've outlined, and I can see how a strict stance on this is justified.

Ordinarily I would agree with you about backporting the necessary fixes to fcl-0.5, but the truth is the change from 0.5 -> 0.6 is almost a complete rewrite, and we don't know which specific changes fixed the issues we were seeing or even what the root cause of the bug was in fcl-0.5. All we know is that our unit tests were giving false negatives in some circumstances when using fcl-0.5, while simply switching to fcl-0.6 allowed the tests to pass.

Given that 0.5 isn't a version that anyone seems to want to use (..as far as I can tell, people only use it because it happens to be the version available in their distro..), I find it hard to justify the effort it would take to track down the bugs and fix them for a patch release of 0.5.

I guess we'll take the approach of stashing the fcl-0.6 source code into our package that depends on it and statically linking it. Our package's API doesn't expose any FCL, so there shouldn't be any issue for downstream users.

@traversaro
Copy link

To address @traversaro's concerns, I'm pretty sure there shouldn't be any linking issues since fcl-0.6 has moved everything into a template implementation. I believe a lucky byproduct of that change is that all of the symbols in fcl-0.6 will be generated with different names from fcl-0.5 even if none of the namespaces or class (now template) names get changed.

To clarify, I am happy with whatever solution OR reaches for this problem. My original comment was just to make sure that everyone involved was aligned w.r.t. to this problem, as in the past I had similar problem with other packages from the ros2 distribution that were shadowing the system ones (in particular urdfdom, see robotology-legacy/gym-ignition#118). If consensus is reached that the pros of packaging fcl 0.6 on rolling are more then the cons, I would be happy with that.

On an unrelated note, I think that to avoid similar problems in the future (Ubuntu 22.04, for example) it would be nice to have a new release of fcl in 2021 with the latest bug fixes, see flexible-collision-library/fcl#532 . Not sure who is the right person to ping on this. I guess @j-rivero is the right person to get the release in Debian sid once a new release is done, but before that a new release needs to be done at the fcl level.

@nuclearsandwich
Copy link
Member Author

Closing this PR since we're not going to release fcl into Rolling. The system version of fcl should be used by ROS packages.

@nuclearsandwich nuclearsandwich deleted the bloom-fcl-0 branch June 23, 2021 04:12
tfoote added a commit that referenced this pull request Sep 9, 2021
* add verbiage about overriding 3rdparty content
The majority of the content is from: https://discourse.ros.org/t/release-package-requiring-custom-version-of-system-dependency/18200/6?u=tfoote

Following up: #29614 (comment)

* Update CONTRIBUTING.md

Co-authored-by: Chris Lalancette <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Chris Lalancette <[email protected]>

* Update CONTRIBUTING.md

* Update CONTRIBUTING.md

Co-authored-by: Jacob Perron <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Jacob Perron <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Steven! Ragnarök <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Chris Lalancette <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Chris Lalancette <[email protected]>

* Update CONTRIBUTING.md

Co-authored-by: Tully Foote <[email protected]>

* Apply suggestions from code review

* Update CONTRIBUTING.md

* Update CONTRIBUTING.md

Co-authored-by: Chris Lalancette <[email protected]>
Co-authored-by: Jacob Perron <[email protected]>
Co-authored-by: Steven! Ragnarök <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants